package com.ccom.api.domain;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.ccom.core.common.serializer.DateToStringSerializer;
import com.ccom.core.common.util.StringUtils;
import com.ccom.core.common.util.oConvertUtils;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.ToString;
import lombok.experimental.Accessors;

import java.io.Serializable;
import java.util.Date;

/**
 * 用户表 tb_user
 */
@Data
@ToString
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
@TableName("tb_user")
public class User implements Serializable {

    private static final long serialVersionUID = 1L;

    @TableId(value = "id", type = IdType.ASSIGN_ID)
    @JsonSerialize(using = ToStringSerializer.class)
    private Long id;

    /**
     * 用户名，登录账户
     */
    private String userName;

    /**
     * 密码，加密存储
     */
    private String password;

    /**
     * md5密码盐
     */
    private String salt;

    /**
     * 注册手机号
     */
    private String phone;

    /**
     * 注册邮箱
     */
    private String email;

    /**
     * 用户来源：1:PC，2：H5，3：Android，4：IOS，5：微信小程序
     */
    private String sourceType;

    /**
     * 昵称
     */
    private String nickName;

    /**
     * 真实姓名
     */
    private String name;

    /**
     * 使用状态（1正常 0非正常）
     */
    private String status;

    /**
     * 删除状态（0，正常，1已删除）
     */
    private Integer delFlag;

    /**
     * 头像地址
     */
    private String headPic;

    /**
     * QQ号码
     */
    private String qq;

    /**
     * 手机是否验证 （0否  1是）
     */
    private String isMobileCheck;

    /**
     * 邮箱是否检测（0否  1是）
     */
    private String isEmailCheck;

    /**
     * 性别，1男，0女
     */
    private String sex;

    /**
     * 会员等级
     */
    private Integer userLevel;

    /**
     * 积分
     */
    private Integer points;

    /**
     * 经验值
     */
    private Integer experienceValue;

    /**
     * 出生年月日
     */
    @JsonSerialize(using = DateToStringSerializer.class)
    private Date birthday;

    /**
     * 注册时间
     */
    @JsonSerialize(using = DateToStringSerializer.class)
    private Date registeTime;

    /**
     * 最后登录时间
     */
    @JsonSerialize(using = DateToStringSerializer.class)
    private Date lastLoginTime;

    public void initUser() {
        this.status = "1";
        this.delFlag = 0;
        this.isMobileCheck = "0";
        this.isEmailCheck = "0";
        this.registeTime = new Date();
        this.salt = oConvertUtils.randomGen(8);
        if (StringUtils.isEmpty(this.sourceType)) {
            this.sourceType = "5";
        }
        if (StringUtils.isEmpty(this.nickName)) {
            this.nickName = "游客" + oConvertUtils.randomNumber(10);
        }

    }

    public void setUserSalt() {
        this.salt = oConvertUtils.randomGen(8);
    }
}
